package com.itheima.weirpc.serializer;

import com.itheima.weirpc.spi.SpiLoader;

import java.util.HashMap;
import java.util.Map;

/**
 * ClassName: SerializerFactory
 * Package: com.itheima.weirpc.serializer
 * Description:
 *序列化器对象是可以复用的，没必要每次执行序列化操作前邹创建一个新的对象。
 * 所以我们可以使用设计模式中的工厂模式+单例模式来简化创建和获取序列化器对象的操作
 * @Author 看到风
 * @Create 2024/11/23 22:06
 * @Version 1.0
 */
public class SerializerFactory {
//    private static final Map<String,Serializer> KEY_SERIALIZER_MAP = new HashMap<>(){{
//     put(SerializerKeys.JDK,new JdkSerializer());
//     put(SerializerKeys.JSON,new JsonSerializer());
//     put(SerializerKeys.KRYO,new KryoSerializer());
//     put(SerializerKeys.HESSIAN,new HessianSerializer());
//
//    }
//    };

    /*
    使用静态代码块，在工厂首次加载时，
    就会调用SpiLoader的Ioad方法加载序列化器接口的所有实现类，之后就可以通过调用getlnstance方法获取指定的实现类对象了
     */
    static {
        SpiLoader.load(Serializer.class);
    }

    /**
     * 默认序列化器
     */
    private static final Serializer DEFAULT_SERIALIZER = new JdkSerializer();

    /**
     * 获取实例
     *
     * @param key
     * @return
     */
//    public static Serializer getInstance(String key) {
//        return KEY_SERIALIZER_MAP.getOrDefault(key,DEFAULT_SERIALIZER);
//    }
        public static Serializer getInstance(String key) {

        return SpiLoader.getInstance(Serializer.class,key);
    }
}
